<?php
/**
 * Description:
 *
 * @Time   2021/8/6 6:21
 * @Author itworker
 */

namespace ServiceSdk\Libs;

class SdkConstants
{
    // 系统间调用传输的认证前台用户id
    const SYS_FRONT_LOGIN_USER_ID = '__userId';
    // 系统间调用传输的认证前台用户id 别名，如果调用方也传了这个别名一样的字段，则以调用方为准
    const SYS_FRONT_LOGIN_USER_ID_ALIAS = 'userId';
    // 系统间调用传输的认证前台用户uuid
    const SYS_FRONT_LOGIN_USER_UUID = '__userUuid';
    // 系统间调用传输的认证前台用户uuid 别名，如果调用方也传了这个别名一样的字段，则以调用方为准
    const SYS_FRONT_LOGIN_USER_UUID_ALIAS = 'uuid';
    // 系统间调用传输的认证后台用户id
    const SYS_ADMIN_LOGIN_USER_ID = '__adminUserId';
    // 系统间调用传输的认证后台用户id 别名，如果调用方也传了这个别名一样的字段，则以调用方为准
    const SYS_ADMIN_LOGIN_USER_ID_ALIAS = 'adminUserId';
    // 调用service服务的发起客户端传输的键
    const REQUEST_CLIENT_NAME = '__client_name';
    // 调用service服务的发起客户端--前端
    const REQUEST_SOURCE_FROM_FRONT = 'front';
    // 调用service服务的发起客户端--后端
    const REQUEST_SOURCE_FROM_ADMIN = 'admin';
    // 全局前台登录key
    const SYS_LOGIN_KEY = '__SYSTEM_LOGIN_USER_INFO';
    // 全局前台用户信息登录加密的密钥
    const SYS_USER_INFO_ENCRYPT_SECRET = '__SYSTEM_LOGIN_USER_INFO_ENCRYPT_KEY';
    // 全局后台登录key
    const SYS__ADMIN_LOGIN_KEY = '__SYSTEM_LOGIN_USER_INFO';
    // 全局后台用户信息登录加密的密钥
    const SYS_ADMIN_USER_INFO_ENCRYPT_SECRET = '__SYSTEM_LOGIN_USER_INFO_ENCRYPT_KEY';
    // 全局客户端请求ip
    const REQUEST_CLIENT_IP = '__client_ip';
    // 全局客户端请求的User-Agent
    const REQUEST_CLIENT_USER_AGENT = '__client_user_agent';

    // -------------------------- BEGIN 接口响应码 --------------------------------
    // 正确时返回码
    const SUCCESS = 200;
    // 通用错误码，除开下面指定错误以外的其他所有错误统一码
    const GLOBAL_ERROR = 9001;
    // 未登录
    const NOT_LOGIN = 50403;
    // 登录系统错误
    const LOGIN_FAIL = 51403;
    // 常规登录不被允许
    const LOGIN_NOT_ALLOWED = 51412;

    //--------------- 参数类错误码规范 BEGIN ----------------------
    // 参数通用错误，比如无法解析、格式化或转义失败等错误
    const PARAM_COMMON_ERROR = 1001;
    // 参数校验错误,即经过验证器或者自定义的校验规则后，出现错误时的返回码
    const PARAM_VALID_ERROR = 1002;
    // 参数经过程序处理时，数据不正确（如重复值等）时的错误码
    const PARAM_VALUE_ERROR = 1003;
    // 图片验证码不正确
    const IMG_CAPTCHA_INVALID = 11403;
    // 手机验证码错误
    const MOBILE_SMS_CODE_ERROR = 10401;
    // 手机号不存在
    const MOBILE_NOT_EXIST = 50404;
    // 手机号已经存在
    const MOBILE_EXISTED = 50200;
    // 代理商邀请码不正确，特定返回码
    const AGENT_INVITE_CODE_ERROR = 55401;
    //--------------- 参数类错误码规范 END----------------------

    //--------------- 业务处理时错误码规范  BEGIN ----------------------

    // 内部程序处理出现错误时的错误码，即代码报错，比如 undefined index ..... 等notice、warning错误时,
    const PROCESSOR_ERROR = 2001;
    // 系统处理超时
    const PROCESS_OVERTIME = 2003;
    // 内部程序业务没有通过逻辑时，比如if 判断时不满足条件等常规错误
    const PROCESSOR_LOGIC_ERROR = 2002;
    // 短信验证码发送失败
    const MOBILE_SMS_SEND_ERROR = 20401;
    // 系统不允许的操作
    const PROCESSOR_NOT_ALLOWED = 21403;
    // 队列执行错误,如队列服务不可用、队列堵塞等有关队列执行的错误码
    const QUEUE_PROCESSOR_ERROR = 2101;
    // 对外开放api拒绝访问错误码
    const API_NO_AUTH_ACCESS = 403;
    // 对外开放api限制访问
    const API_REQUEST_LIMIT = 429;
    // 业务类型不支持
    const PROCESSOR_NOT_SUPPORT = 22001;
    // 上传文件失败
    const UPLOAD_FILE_ERROR = 22403;
    // 上传文件不合法
    const UPLOAD_FILE_INVALID = 22401;
    //--------------- 业务处理时错误码规范  END ----------------------

    //--------------- 数据库执行时错误规范  BEGIN ----------------------
    // 数据库执行错误,如sql执行错误，数据库报错等
    const DB_ERROR = 3001;
    const DB_INSERT_ERROR = 3002;
    const DB_UPDATE_ERROR = 3003;
    const DB_DELETE_ERROR = 3004;
    // 数据库已存在记录
    const DB_DATA_EXIST = 3201;
    // 数据库不存在记录
    const DB_DATA_NOT_EXIST = 3404;
    //--------------- 数据库执行时错误规范  END ----------------------

    // -------------------------- END 接口响应码 --------------------------------
    // 程序内部返回值结构统一规定
    const PROCESSOR_RETURN_STRUCTURE = [
        'error'   => 0,
        'message' => '操作成功',
        'data'    => []
    ];

    /**
     * Description: 错误码信息规范
     *
     * @param int $code
     *
     * @return string
     * @Date  : 20-9-9 上午9:10
     */
    public static function getErrorCodeMessage(int $code): string
    {
        $mappings = [
            self::SUCCESS                 => '操作成功',
            self::GLOBAL_ERROR            => '系统处理失败',
            self::LOGIN_FAIL              => '登录失败',
            self::PARAM_COMMON_ERROR      => '请求参数错误',
            self::MOBILE_SMS_CODE_ERROR   => '短信验证码错误',
            self::MOBILE_SMS_SEND_ERROR   => '短信验证码发送失败',
            self::MOBILE_NOT_EXIST        => '手机号还未注册',
            self::MOBILE_EXISTED          => '手机号已经被使用',
            self::PROCESSOR_ERROR         => '业务处理失败',
            self::PROCESSOR_LOGIC_ERROR   => '业务处理失败',
            self::PROCESSOR_NOT_ALLOWED   => '系统不允许的业务操作',
            self::QUEUE_PROCESSOR_ERROR   => '系统队列执行失败',
            self::API_NO_AUTH_ACCESS      => 'API无权限访问',
            self::API_REQUEST_LIMIT       => 'API请求频繁，暂时限制访问',
            self::PROCESSOR_NOT_SUPPORT   => '业务类型不支持',
            self::UPLOAD_FILE_ERROR       => '上传文件失败',
            self::DB_ERROR                => '数据处理失败',
            self::DB_INSERT_ERROR         => '数据信息添加失败',
            self::DB_UPDATE_ERROR         => '数据信息更新失败',
            self::DB_DELETE_ERROR         => '数据信息删除失败',
            self::DB_DATA_EXIST           => '数据已经存在',
            self::DB_DATA_NOT_EXIST       => '数据不存在',
            self::AGENT_INVITE_CODE_ERROR => '邀请码不正确',
        ];

        return $mappings[$code] ?? '操作错误';
    }
}
